package com.example.handler;

import com.example.model.FraudRiskResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Comparator;
import java.util.List;

/**
 * 风险处理器链
 * 负责协调不同风险处理器的执行
 * 
 * @author system
 */
@Component
@RequiredArgsConstructor
@Slf4j
public class RiskHandlerChain {

  private final List<RiskHandler> handlers;

  /**
   * 处理风险
   * 按照处理器优先级顺序执行
   * 
   * @param result 风险检测结果
   */
  public void handleRisk(FraudRiskResult result) {
    log.info("开始处理风险，用户地址：{}，风险等级：{}", result.getUserAddress(), result.getRiskLevelDesc());

    // 按照优先级排序并执行能够处理该风险的处理器
    handlers.stream()
        .sorted(Comparator.comparingInt(RiskHandler::getOrder))
        .filter(handler -> handler.canHandle(result))
        .forEach(handler -> {
          try {
            handler.handle(result);
          } catch (Exception e) {
            log.error("风险处理异常", e);
          }
        });

    log.info("风险处理完成，用户地址：{}", result.getUserAddress());
  }
}